Skip to content

[2520] Prove expiry transition state is scoped - #2745

Merged
Chris0Jeky merged 1 commit into
mainfrom
issue-2520/scope-proof
Sep 6, 2026
Merged

[2520] Prove expiry transition state is scoped#2745
Chris0Jeky merged 1 commit into
mainfrom
issue-2520/scope-proof

Conversation

@Chris0Jeky

Copy link
Copy Markdown
Owner

Summary

  • add a service-level regression for archived-board skip transition state
  • prove one service instance logs the repeated count once then emits the debug continuation
  • prove a fresh service instance starts its own informational transition

Proof

  • focused detector passes 1/1 after compile
  • controlled static-field mutation made the focused detector fail (1 info instead of 2), then production code was restored byte-for-byte
  • AutomationProposalServiceTests: 152 passed
  • dotnet test -c Release -m:1 on the focused class
  • git diff --check

The production service is unchanged; this is a test-only proof slice.

Refs #2520

No issue close or merge requested; this PR is intentionally left open for review.

@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@Chris0Jeky
Chris0Jeky merged commit e6c02dd into main Sep 6, 2026
35 checks passed
@Chris0Jeky
Chris0Jeky deleted the issue-2520/scope-proof branch September 6, 2026 11:53
@github-project-automation github-project-automation Bot moved this from Pending to Done in Taskdeck Execution Sep 6, 2026
@Chris0Jeky

Copy link
Copy Markdown
Owner Author

Fresh-context review record (coordinator, 2026-09-06; read-only Opus 5 reviewer over the diff against the merge base; route: the standing D-12 rule for Codex-session PRs — review, fix MEDIUM+ in-PR, merge, disposition comment).

VERDICT: SHIP, nothing fixed in-PR. Mutation resistance is real (a static _lastSkippedArchivedBoardCount sends the third call down the wrong branch and fails both assertions); no shared state; mocks match the siblings. LOWs recorded for #2520: ExpireProposalsAsync has no production caller (the shipped sweep is ProposalHousekeepingWorker, which keeps its own transition state), so the log-noise guarantee does not reach the worker; near-duplicate of ExpireProposalsAsync_ShouldLogArchivedBoardSkipOnlyOnCountTransitions in the edge-case file; no Times.Exactly(3) verify on the repository.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant